package com.fly.platform.common.utils

import com.fly.platform.vo.FlyResult

/**
 * @author fei
 */
class ResultUtil<T> {

    private val result: FlyResult<T> = FlyResult()

    fun setData(t: T): FlyResult<T> {

        return result.apply {

            result = t
            code = 200
        }
    }

    fun setSuccessMsg(msg: String?): FlyResult<T> {

        return result.apply {

            success = true
            message = msg
            code = 200
            result = null
        }

    }

    fun setData(t: T, msg: String?): FlyResult<T> {

        return result.apply {

            result = t
            code = 200
            message = msg
        }
    }

    fun setErrorMsg(msg: String?): FlyResult<T> {

        return result.apply {

            success = false
            message = msg
            code = 500
        }
    }

    fun setErrorMsg(code: Int?, msg: String?): FlyResult<T> {

        return result.apply {

            success = false
            message = msg
            this.code = code
        }
    }

    companion object {

        fun <T> data(t: T): FlyResult<T> {
            return ResultUtil<T>().setData(t)
        }

        fun <T> data(t: T, msg: String?): FlyResult<T> {
            return ResultUtil<T>().setData(t, msg)
        }

        fun <T> success(msg: String?): FlyResult<T> {
            return ResultUtil<T>().setSuccessMsg(msg)
        }

        fun <T> error(msg: String?): FlyResult<T> {
            return ResultUtil<T>().setErrorMsg(msg)
        }

        fun <T> error(code: Int?, msg: String?): FlyResult<T> {
            return ResultUtil<T>().setErrorMsg(code, msg)
        }
    }

}